//路由鉴权，项目当中路由能不能被权限的设置，什么条件下可以访问
import router from '@/router/index'
//获取token数据，判断是否登录成功
import useUserStore from './store/modules/user'
// import nprogress from 'nprogress'
// import 'nprogress/nprgress.css'
import pinia from './store'

//引入用户setting设置
import setting from './setting'

let userStore = useUserStore(pinia)

//全局守卫：项目中任意路由切换都会触发的钩子
//全局前置守卫
router.beforeEach(async (to, _from, next) => {
  //访问某一个路由之前执行
  document.title = `${setting.title} - ${to.meta.title}`
  // nprogress.start()
  //判断token
  let token = userStore.token
  //获取用户名字
  let username = userStore.username
  //用户登录判断
  if (token) {
    //登录成功，访问login，不能访问，指向首页
    if (to.path === '/login') {
      next({ path: '/' })
    } else {
      //登录成功访问其余6个路由
      //有用户信息放行
      if (username) {
        //放行
        next()
      } else {
        //没有用户信息，就发请求获取到了用户信息再放行
        try {
          await userStore.userInfo()
          //如果刷新时获取了用户信息，但是动态路由还没注册，就会出现白屏

          next({ ...to })
        } catch (error) {
          console.log(error)
          //token过期，用户修改token
          //退出登录
          await userStore.userLogout()
          next({ path: '/login', query: { redirect: to.path } })
        }
      }
      // next()
    }
  } else {
    //未登录判断
    if (to.path === '/login') {
      next()
    } else {
      next({ path: '/login', query: { redirect: to.path } })
    }
  }
})

// 后置守卫
// router.afterEach((to, from) => {
// to and from are both route objects.
// nprogress.done()
// })

//1.进度条
//2.鉴权
//未登录可以访问login，其余的不能访问
//登录成功后，不可以访问login，其余可以访问
